package main

import "fmt"

var zhtest = "zh2"

// 我是注释
func main() {

	// 变量
	testVariable()

	// iota
	testIota()

	// for
	testFor()

	fmt.Println("\n-----")
	// 类型别名
	type saliint = int
	var c = 30
	var d = 40
	e := c + d
	fmt.Println("result", e)
}

func testFor() {
	// 循环
	i := 1
	for i <= 10 {
		fmt.Println(i)
		i++
	}

	// 返回下标和对应的值
	str := "hello, sali"
	for i2, v := range str {
		fmt.Print(i2)
		fmt.Printf("%c", v)
		fmt.Print(string(v))
	}

	fmt.Println("\n--------------")
}

func testIota() {
	// iota，计数器
	const (
		aa4 = iota
		aa5 = iota
		aa6 = iota
	)

	const (
		bb4 = iota
		bb5
		bb6
		bb7 = "123"
		bb8
	)
	fmt.Println(aa4, aa5, aa6, aa6)
	fmt.Println(bb4, bb5, bb6, bb7, bb8)
}

func testVariable() {
	fmt.Println("Hello, Sali")

	var name = "Sali"
	var age = 18
	fmt.Println(name, age)

	var (
		name1 string
		age1  int
		addr1 string
	)
	fmt.Println(name1, age1, addr1)

	// := 是自动推导类型
	name2 := "sali"
	age2 := 27
	fmt.Println(name2, age2)
	fmt.Printf("%T, %T", name2, age2)

	// 查看内存地址
	var num int
	num = 100
	fmt.Println()
	fmt.Printf("num:%d, 内存地址：%p", num, &num)
	fmt.Println()
	num = 200
	fmt.Printf("num:%d, 内存地址：%p", num, &num)
	fmt.Println()

	// 变量交换
	aa := 100
	bb := 200
	aa, bb = bb, aa
	fmt.Println(aa, bb)

	aa2, bb2 := test()
	fmt.Println(aa2, bb2)

	// 匿名变量
	aa3, _ := test()
	fmt.Println(aa3)

	// 全局和局部变量可以使用同一个名字，但是有就近原则
	var zhtest = "zh1"
	fmt.Println(zhtest)

	// 常量
	const URL string = "http://www.baidu.com"
	const const1, const2, const3 = 3.14, "sali", false
	fmt.Println(URL)
	fmt.Println(const1, const2, const3)
}

func test() (int, int) {
	return 100, 200
}
